#include<iostream>
using namespace std;
//const_cast<type>(expression)   应用场景。

#if 0
//(1) 对于引用的扩充。当引用量为常量的时候，使用const来生成一个临时变量。
void func(const int &r)
{
    //只能对变量作引用，对已有的名字才能起小名。
}

int main ()
{
    func(10);
    return 0;
}

//(2)引用传参时，变量为const类型的，导致传参之后变量还是不可修改，此时可以将变量先 const_cast 脱离属性，再传递使用。
void func2(int &a)
{
    cout<<a<<endl; //ok
    //那么问题又来了，此时原本const类型的a 已经脱离const属性了，现在能修改a的值吗。
    a = 1;
    cout<<a<<endl;
    //确实可以修改。。。。
}
int main()
{
    const int a = 100;
    // func2(a); fatal:将 \"int &\" 类型的引用绑定到 \"const int\" 类型的初始值设定项时，限定符被丢弃"

    func2(const_cast<int &>(a));
    return 0;
}

#endif


//(3)尝试查看修改const变量的情况
int main ()
{
    const int a = 100;
    int &ra = const_cast<int &>(a);
    ra = 1;
    cout<<"ra = "<<ra<<"    "<<"a = "<<a<<endl;
    cout<<"&ra = "<<&ra<<"    "<<"&a = "<<&a<<endl;
    return 0;
}
/*
综上
(1) const类型的变量是不可修改的！
(2) 脱离const之后，修改其引用的值，发现确实可以改变。
！  问题是 查看ra 和 a的地址都是一样的，但是其值不一致？？？？ 这是什么鬼
*/